import 'package:easy_refresh/easy_refresh.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:sports_new/controller/navigation_logic.dart';
import 'package:sports_new/controller/match/list/lq_match_filter_logic.dart';
import 'package:sports_new/controller/match/list/lq_view_logic.dart';
import 'package:sports_new/controller/match/list/match_page_logic.dart';
import 'package:sports_new/controller/match/list/zq_match_filter_logic.dart';
import 'package:sports_new/controller/match/list/zq_view_logic.dart';
import 'package:sports_new/resources/colours.dart';
import 'package:sports_new/resources/styles.dart';
import 'package:sports_new/utils/constant.dart';
import 'package:sports_new/utils/utils.dart';
import 'package:sports_new/view/loading/loading_match_list.dart';
import 'package:sports_new/view/match/match_filter_float_widget.dart';
import 'package:sports_new/view/match/soccer/zq_match_cell.dart';
import 'package:sports_new/widgets/loading/loading_widget.dart';
import 'package:sports_new/widgets/loading/no_data_widget.dart';
import 'package:sports_new/widgets/header_delegate.dart';
import 'package:visibility_detector/visibility_detector.dart';

import '../../../utils/sp_utils.dart';
import '../../../widgets/ads_label.dart';
import 'lq_match_cell.dart';

class LqHotView extends StatefulWidget {
  const LqHotView({super.key, required this.title, required this.hotId});

  final String title;
  final String hotId;

  @override
  State<LqHotView> createState() => _LqHotViewState();
}

class _LqHotViewState extends State<LqHotView> {
  late final LqViewLogic logic;

  @override
  void initState() {
    logic = Get.put(
        LqViewLogic(LqMatchType.hot, Constant.matchFilterTagHot,hotId: widget.hotId,hotLabel: widget.title),
        tag: "${Constant.matchFilterTagHot}${widget.title}",permanent: true);
    super.initState();
  }
  
  @override
  Widget build(BuildContext context) {
    return GetBuilder<LqViewLogic>(
      tag: "${Constant.matchFilterTagHot}${widget.title}",
      builder: (_) {
        return VisibilityDetector(
          key: const Key('hot'),
          onVisibilityChanged: (VisibilityInfo info) {
            if(info.visibleBounds.isEmpty && logic.groupMatchList != null) {
              logic.getMatch();
            }
          },
          child: Container(
            color: Colours.greyF2F3F7,
            child: Stack(
              alignment: Alignment.center,
              children: [
                EasyRefresh.builder(
                    controller: logic.refreshC,
                    header: Styles.refreshHeader(position: IndicatorPosition.locator),
                    onRefresh: () async {
                      Utils.onEvent('bspd_sx');
                      await logic.getMatch();
                    },
                    childBuilder: (BuildContext context, ScrollPhysics physics) =>
                        CustomScrollView(
                          physics: physics,
                          slivers: [
                            const HeaderLocator.sliver(),
                            if(SpUtils.matchLqAds?[0].hasValue == false ||
                                DateTime.now().difference(DateTime.parse(SpUtils.matchLqAds![0])).inHours > 24)
                              SliverToBoxAdapter(
                                child: AdsLabel(
                                  adsTag: "match_lq_${widget.title}",
                                  close: 0,
                                  tapType: 'match_advertising',
                                  tagParam: widget.title,
                                  margin: const EdgeInsets.fromLTRB(8, 8, 8, 0),
                                  onClose: () => setState(() {}),
                                ),
                              ),
                            LoadingWidget<int>(
                              data: logic.groupMatchList?.length ?? 0,
                              isLoading: logic.firstLoad,
                              loading: const LoadingMatchList.sliver(sportsId: 2),
                              noData: NoDataWidget.sliver(
                                tip: logic.quickFilter == QuickFilter.yiji
                                    ? '暂无一级比赛'
                                    : (logic.quickFilter == QuickFilter.jingcai
                                    ? '暂无竞篮比赛'
                                    : '暂无比赛'),
                              ),
                              child: () => const SliverToBoxAdapter(),
                            ),
                            if((logic.groupMatchList?.length ?? 0) > 0)
                              ...List.generate(
                                  logic.dayList?.length ?? 0,
                                      (index) => SliverMainAxisGroup(
                                      slivers: [
                                        SliverPersistentHeader(
                                            pinned: true,
                                            delegate: HeaderDelegate(
                                                extent: 28,
                                                child: Styles.matchListGroupHeader(logic.dayList![index])
                                            )
                                        ),
                                        SliverList(
                                            delegate: SliverChildBuilderDelegate(
                                                childCount: logic.groupMatchList?[index].length ?? 0,
                                                    (context, i) => LqMatchCell(logic.groupMatchList![index][i])
                                            )
                                        )
                                      ]
                                  )
                              ),
                            SliverToBoxAdapter(
                              child: Container(height: 80),
                            )
                          ],
                        )
                ),
                Positioned(
                    bottom: 40,
                    child: MatchFilterFloatWidget(
                      1,
                      logic.firstLoad,
                      logic.quickFilter,
                      onTap: (index) {
                        logic.onSelectMatchType(index);
                      },
                    )),
                Styles.matchListBottomBar(
                    logic.hideMatchNum != 0 && !logic.isBottomHide,
                    logic.hideMatchNum, onClose: () {
                  Utils.onEvent('bspd_sxfc_gb');
                  logic.onCloseBottomBar();
                }, onDefault: () {
                  Utils.onEvent('bspd_sxfc_hf');
                  logic.onSelectDefaultMatch();
                  // update();
                })
              ],
            ),
          ),
        );
      },
    );
  }
}
